package com.jpardogo.android.listbuddies.ui; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.graphics.Matrix; import android.graphics.RectF; import android.os.Build; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.widget.ImageView; import com.jpardogo.android.listbuddies.Utils.Utils; /** * Created by jpardogo on 25/02/2014. */ public class BaseActivity extends ActionBarActivity { private static final int RightToLeft = 1; private static final int LeftToRight = 2; private static final int DURATION = 30000; private RectF mDisplayRect = new RectF(); private final Matrix mMatrix = new Matrix(); private int mDirection = RightToLeft; private ValueAnimator mCurrentAnimator; private float mScaleFactor; protected ImageView mBackground; @Override protected void onCreate(Bundle savedInstanceState) { overridePendingTransition(0, 0); super.onCreate(savedInstanceState); } protected void moveBackground() { if (Utils.hasHoneycomb()) { mBackground.post(new Runnable() { @Override public void run() { mScaleFactor = (float) mBackground.getHeight() / (float) mBackground.getDrawable().getIntrinsicHeight(); mMatrix.postScale(mScaleFactor, mScaleFactor); mBackground.setImageMatrix(mMatrix); animate(); } }); } } private void animate() { updateDisplayRect(); if (mDirection == RightToLeft) { animate(mDisplayRect.left, mDisplayRect.left - (mDisplayRect.right - mBackground.getWidth())); } else { animate(mDisplayRect.left, 0.0f); } } private void updateDisplayRect() { mDisplayRect.set(0, 0, mBackground.getDrawable().getIntrinsicWidth(), mBackground.getDrawable().getIntrinsicHeight()); mMatrix.mapRect(mDisplayRect); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void animate(float from, float to) { mCurrentAnimator = ValueAnimator.ofFloat(from, to); mCurrentAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (Float) animation.getAnimatedValue(); mMatrix.reset(); mMatrix.postScale(mScaleFactor, mScaleFactor); mMatrix.postTranslate(value, 0); mBackground.setImageMatrix(mMatrix); } }); mCurrentAnimator.setDuration(DURATION); mCurrentAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { if (mDirection == RightToLeft) mDirection = LeftToRight; else mDirection = RightToLeft; animate(); } }); mCurrentAnimator.start(); } }